## [1] "Run Completed at 2018-02-05 14:32:18"

Absence data

Models

Random Baseline

\[ Yobs_{i,j} \sim Bernoulli(N(0,1.68)) \]

Note that this is a random probability of interaction on a per observation basis. This is different than a random link model. If we are interested in a binary network, a random interaction probability model will lead to a link probability of 1-(1/2)^n in n sampling events.

## sink("models/SpeciesIdentity.jags")
## cat("
##     model {
##     
##     for (x in 1:Nobs){
## 
##     #observation
##     logit(s[x])<-alpha[Bird[x],Plant[x]]
##     Yobs[x] ~ dbern(s[x])
##     
##     #Observed discrepancy
##     E[x]<-abs(Yobs[x]- s[x])
##     }
##     
##     #Assess Model Fit - Predict remaining data
##     for(x in 1:Nnewdata){
##     
##       #Generate prediction
##       logit(snew[x])<-alpha[NewBird[x],NewPlant[x]]
##       Ynew_pred[x]~dbern(snew[x])
##     
##       #Assess fit, proportion of corrected predicted observations
##       Enew[x]<-abs(Ynew[x]-Ynew_pred[x])
## 
##     }
##     
##     #Priors
## 
##     #Species level priors
##     for (i in 1:Birds){
##       for (j in 1:Plants){
## 
##         #Intercept
##         #logit prior, then transform for plotting
##         alpha[i,j] ~ dnorm(0,0.386)
##       } 
##     }
## 
##     #derived posterior check
##     fit<-sum(E[]) #Discrepancy for the observed data
##     fitnew<-sum(Enew[])
##     }
##     ",fill=TRUE)
## 
## sink()
## Compiling model graph
##    Resolving undeclared variables
##    Allocating nodes
## Graph information:
##    Observed stochastic nodes: 0
##    Unobserved stochastic nodes: 1953
##    Total graph size: 7961
## 
## Initializing model

Assess Convergence

Species Identity

\[ Yobs_{i,j} \sim Bernoulli(\lambda_{i,j}) \]

## sink("models/SpeciesIdentity.jags")
## cat("
##     model {
##     
##     for (x in 1:Nobs){
## 
##     #observation
##     logit(s[x])<-alpha[Bird[x],Plant[x]]
##     Yobs[x] ~ dbern(s[x])
##     
##     #Observed discrepancy
##     E[x]<-abs(Yobs[x]- s[x])
##     }
##     
##     #Assess Model Fit - Predict remaining data
##     for(x in 1:Nnewdata){
##     
##       #Generate prediction
##       logit(snew[x])<-alpha[NewBird[x],NewPlant[x]]
##       Ynew_pred[x]~dbern(snew[x])
##     
##       #Assess fit, proportion of corrected predicted observations
##       Enew[x]<-abs(Ynew[x]-Ynew_pred[x])
## 
##     }
##     
##     #Priors
## 
##     #Species level priors
##     for (i in 1:Birds){
##       for (j in 1:Plants){
## 
##         #Intercept
##         #logit prior, then transform for plotting
##         alpha[i,j] ~ dnorm(0,0.386)
##       } 
##     }
## 
##     #derived posterior check
##     fit<-sum(E[]) #Discrepancy for the observed data
##     fitnew<-sum(Enew[])
##     }
##     ",fill=TRUE)
## 
## sink()
## Compiling model graph
##    Resolving undeclared variables
##    Allocating nodes
## Graph information:
##    Observed stochastic nodes: 519
##    Unobserved stochastic nodes: 1434
##    Total graph size: 7465
## 
## Initializing model

Assess Convergence

Trait-matching

For hummingbird species i feeding on plant species j observed at time k and sampling event observed by transect

Observation Model:

\[ Yobs_{i,j,k,d} \sim Binomial(N_{i,j,k},\omega) \]

Process Model:

\[ N_{i,j,k} \sim Binomial(\lambda_{i,j,k}) \] \[ logit(\lambda_{i,j,k}) = \alpha_i + \beta_{1,i} * Traitmatch_{i,j} \]

## sink("models/TraitMatch.jags")
## cat("
##     model {
##     
##     for (x in 1:Nobs){
##   
##     logit(s[x])<-alpha[Bird[x]] + beta1[Bird[x]] * Traitmatch[Bird[x],Plant[x]] 
##     Yobs[x] ~ dbern(s[x])
##     
##     #Observed discrepancy
##     E[x]<-abs(Yobs[x]- s[x])
##     }
##     
##     #Assess Model Fit - Predict remaining data
##     for(x in 1:Nnewdata){
##     
##     #Generate prediction
##     logit(snew[x])<-alpha[NewBird[x]] + beta1[NewBird[x]] * Traitmatch[NewBird[x],NewPlant[x]] 
##     Ynew_pred[x]~dbern(snew[x])
##     
##     #Assess fit, proportion of corrected predicted links
##     Enew[x]<-abs(Ynew[x]-Ynew_pred[x])
##     
##     }
##     
##     #Priors
## 
##     #Process Model
##     #Species level priors
##     for (i in 1:Birds){
##     
##     #Intercept
##     #logit prior, then transform for plotting
##     alpha[i] ~ dnorm(alpha_mu,alpha_tau)
##     
##     #Traits slope 
##     beta1[i] ~ dnorm(beta1_mu,beta1_tau)    
##     
##     }
##     
##     #Group process priors
##     
##     #Intercept 
##     alpha_mu ~ dnorm(0,0.386)
##     alpha_tau ~ dt(0,1,1)I(0,)
##     alpha_sigma<-pow(1/alpha_tau,0.5) 
##     
##     #Trait
##     beta1_mu~dnorm(0,0.386)
##     beta1_tau ~ dt(0,1,1)I(0,)
##     beta1_sigma<-pow(1/beta1_tau,0.5)
##     
##     #derived posterior check
##     fit<-sum(E[]) #Discrepancy for the observed data
##     fitnew<-sum(Enew[])
##     
##     }
##     ",fill=TRUE)
## 
## sink()
## Compiling model graph
##    Resolving undeclared variables
##    Allocating nodes
## Graph information:
##    Observed stochastic nodes: 519
##    Unobserved stochastic nodes: 762
##    Total graph size: 7974
## 
## Initializing model

Assess Convergence

Detectability

To Do. Should I also do traits without the detection probabilities?

Species Identity

Observation Model:

\[ Yobs_{i,j,k,d} \sim Binomial(N_{i,j,k},\omega) \]

Process Model:

\[ N_{i,j,k} \sim Binomial(\lambda_{i,j}) \] \[ Yobs_{i,j} \sim Bernoulli(\lambda_{i,j}) \]

## sink("models/SpeciesIdentity_Detect.jags")
## cat("
##     model {
##     
##     #Observation Model
##     for (x in 1:Nobs){
##       
##       #Observation Process
##       #True state
##       z[x] ~ dbern(detect[Bird[x]]) 
##       
##       #Observation
##       logit(s[x])<-alpha[Bird[x],Plant[x]]
##       p[x]<-z[x] * s[x]
##       Yobs[x] ~ dbern(p[x])
##       
##       #Observed discrepancy
##       E[x]<-abs(Yobs[x]- s[x])
##     }
##     
##     #Assess Model Fit - Predict remaining data
##     for(x in 1:Nnewdata){
##     
##       #Generate prediction
##       znew[x] ~ dbern(detect[NewBird[x]])
##       logit(snew[x])<-alpha[NewBird[x],NewPlant[x]]
##       pnew[x]<-znew[x]*snew[x]
##   
##       #Predicted observation
##       Ynew_pred[x]~dbern(pnew[x])
##       
##       #Assess fit, proportion of corrected predicted links
##       Enew[x]<-abs(Ynew[x]-Ynew_pred[x])
##     
##     }
##     
##     #Priors
##     #Observation model
##     #Detect priors, logit transformed - Following lunn 2012 p85
##     
##     for(x in 1:Birds){
##       logit(detect[x])<-dcam[x]
##       dcam[x]~dnorm(omega_mu,omega_tau)
##     }
##     
##     #Process Model
##     #Species level priors
##     for (i in 1:Birds){
##       for (j in 1:Plants){
##         #Intercept
##         #logit prior, then transform for plotting
##         alpha[i,j] ~ dnorm(0,0.386)
##       } 
##     }
##     
##     #OBSERVATION PRIOR
##     omega_mu ~ dnorm(0,0.386)
##     omega_tau ~ dunif(0,10)
##     
##     #derived posterior check
##     fit<-sum(E[]) #Discrepancy for the observed data
##     fitnew<-sum(Enew[])
##     
##     }
##     ",fill=TRUE)
## 
## sink()
## Compiling model graph
##    Resolving undeclared variables
##    Allocating nodes
## Graph information:
##    Observed stochastic nodes: 519
##    Unobserved stochastic nodes: 2687
##    Total graph size: 9970
## 
## Initializing model

Assess Convergence

Trait-matching

For hummingbird species i feeding on plant species j observed at time k and sampling event observed by transect

Observation Model:

\[ Yobs_{i,j,k,d} \sim Binomial(N_{i,j,k},\omega) \]

Process Model:

\[ N_{i,j,k} \sim Binomial(\lambda_{i,j,k}) \] \[ logit(\lambda_{i,j,k}) = \alpha_i + \beta_{1,i} * Traitmatch_{i,j} \]

## sink("models/TraitMatch_Detect.jags")
## cat("
##     model {
##     
##     #Observation Model
##     for (x in 1:Nobs){
##     
##     #Observation Process
##     #True state
##     z[x] ~ dbern(detect[Bird[x]]) 
##     
##     #observation
##     logit(s[x])<-alpha[Bird[x]] + beta1[Bird[x]] * Traitmatch[Bird[x],Plant[x]] 
##     p[x]<-z[x] * s[x]
##     Yobs[x] ~ dbern(p[x])
##     
##     #Observed discrepancy
##     E[x]<-abs(Yobs[x]- s[x])
##     }
##     
##     #Assess Model Fit - Predict remaining data
##     for(x in 1:Nnewdata){
##     
##     #Generate prediction
##     znew[x] ~ dbern(detect[NewBird[x]])
##     logit(snew[x])<-alpha[NewBird[x]] + beta1[NewBird[x]] * Traitmatch[NewBird[x],NewPlant[x]] 
##     pnew[x]<-znew[x]*snew[x]
##     Ynew_pred[x]~dbern(pnew[x])
##     
##     #Assess fit, proportion of corrected predicted links
##     Enew[x]<-abs(Ynew[x]-Ynew_pred[x])
##     
##     }
##     
##     #Priors
##     #Observation model
##     #Detect priors, logit transformed - Following lunn 2012 p85
##     
##     for(x in 1:Birds){
##     logit(detect[x])<-dcam[x]
##     dcam[x]~dnorm(omega_mu,omega_tau)
##     }
##     
##     #Process Model
##     #Species level priors
##     for (i in 1:Birds){
##     
##     #Intercept
##     #logit prior, then transform for plotting
##     alpha[i] ~ dnorm(alpha_mu,alpha_tau)
##     
##     #Traits slope 
##     beta1[i] ~ dnorm(beta1_mu,beta1_tau)    
##     
##     }
##     
##     #OBSERVATION PRIOR
##     omega_mu ~ dnorm(0,0.386)
##     omega_tau ~ dunif(0,10)
##     
##     #Group process priors
##     
##     #Intercept 
##     alpha_mu ~ dnorm(0,0.386)
##     alpha_tau ~ dt(0,1,1)I(0,)
##     alpha_sigma<-pow(1/alpha_tau,0.5) 
##     
##     #Trait
##     beta1_mu~dnorm(0,0.386)
##     beta1_tau ~ dt(0,1,1)I(0,)
##     beta1_sigma<-pow(1/beta1_tau,0.5)
##     
##     #derived posterior check
##     fit<-sum(E[]) #Discrepancy for the observed data
##     fitnew<-sum(Enew[])
##     
##     }
##     ",fill=TRUE)
## 
## sink()
## Compiling model graph
##    Resolving undeclared variables
##    Allocating nodes
## Graph information:
##    Observed stochastic nodes: 519
##    Unobserved stochastic nodes: 2015
##    Total graph size: 10479
## 
## Initializing model

Assess Convergence

Abundance

Using the counts from the transects. Abundance is especially important to model, since its fluctuating all the time.

Do we have time for this?

Incorportating species occurrence

If species co-occurrence is a prerequisite for interaction, then the absence of interactions may stem either from a lack of detectability or species absence. We can jointly model the presence of species as a function of elevation and then existance of an interaction.

Species Identity

Observation Model:

\[ Yobs_{i,j,k,d} \sim Binomial(N_{i,j,k},\omega) \]

Process Model:

\[ N_{i,j,k} \sim Binomial(\lambda_{i,j}) \] \[ Yobs_{i,j} \sim Bernoulli(\lambda_{i,j}) \]

## sink("models/SpeciesIdentity_Detect_Elevation.jags")
## cat("
##     model {
##     
##     #Observation Model
##     for (x in 1:Nobs){
##     
##       #Occurrence Process
##       logit(psi[x])<-alpha_occ[Bird[x]] + beta_occ[Bird[x]] * elevation[x] + beta2_occ[Bird[x]] * elevation[x]^2
##       occ[x] ~ dbern(psi[x])
##       
##       #Is the species available to be detected?
##       rho[x]<-detect[Bird[x]]*occ[x]
##       
##       #Observation Process
##       #True state
##       z[x] ~ dbern(rho[x]) 
##       
##       #observation
##       logit(s[x])<-alpha[Bird[x],Plant[x]]
##       p[x]<-z[x] * s[x]
##       Yobs[x] ~ dbern(p[x])
##       
##       #Observed discrepancy
##       E[x]<-abs(Yobs[x]- s[x])
##     }
##     
##     #Assess Model Fit - Predict remaining data
##     for(x in 1:Nnewdata){
##     
##       #Generate prediction
##       #Occurrence Process
##       logit(psi_new[x])<-alpha_occ[NewBird[x]] + beta_occ[NewBird[x]] * elevation_new[x]
##       occ_new[x] ~ dbern(psi_new[x])
##       
##       #Is the species present to be detected?
##       rho_new[x]<-detect[NewBird[x]]*occ_new[x]
##       znew[x] ~ dbern(rho_new[x])
## 
##       logit(snew[x])<-alpha[NewBird[x],NewPlant[x]]
##       pnew[x]<-znew[x]*snew[x]
##   
##       #Predicted observation
##       Ynew_pred[x]~dbern(pnew[x])
##       
##       #Assess fit, proportion of corrected predicted links
##       Enew[x]<-abs(Ynew[x]-Ynew_pred[x])
##     
##     }
##     
##     #Priors
##     #Note: flat logit priorsm - Following lunn 2012 p85
## 
## 
##     #Occurrence Priors
##     for(x in 1:Birds){
##       alpha_occ[x] ~ dnorm(0,0.386)
##       beta_occ[x] ~ dnorm(0,0.386)
##       beta2_occ[x] ~ dnorm(0,0.386)
##     }
## 
##     #Observation model
## 
##     for(x in 1:Birds){
##       logit(detect[x])<-dcam[x]
##       dcam[x]~dnorm(omega_mu,omega_tau)
##     }
## 
##     
##     #Process Model
##     #Species level priors
##     for (i in 1:Birds){
##       for (j in 1:Plants){
##         #Intercept
##         #logit prior, then transform for plotting
##         alpha[i,j] ~ dnorm(0,0.386)
##       } 
##     }
##     
##     #OBSERVATION PRIOR
##     omega_mu ~ dnorm(0,0.386)
##     omega_tau ~ dunif(0,10)
##     
##     #derived posterior check
##     fit<-sum(E[]) #Discrepancy for the observed data
##     fitnew<-sum(Enew[])
##     
##     }
##     ",fill=TRUE)
## 
## sink()
## Compiling model graph
##    Resolving undeclared variables
##    Allocating nodes
## Graph information:
##    Observed stochastic nodes: 519
##    Unobserved stochastic nodes: 3990
##    Total graph size: 16945
## 
## Initializing model

Assess Convergence

Elevation ranges

Model Comparison

Predicted network statistics

Dashed line is the observed network from the time-series.

## # A tibble: 12 x 3
## # Groups:   L1 [?]
##    L1                       value     n
##    <chr>                    <dbl> <dbl>
##  1 Random                    0     27.4
##  2 Random                    1.00 225  
##  3 Species                   0     48.9
##  4 Species                   1.00 203  
##  5 Species_Detect            0    181  
##  6 Species_Detect            1.00  70.9
##  7 Species_Detect_Elevation  0    185  
##  8 Species_Detect_Elevation  1.00  67.0
##  9 Traits                    0    184  
## 10 Traits                    1.00  68.3
## 11 Traits_Detect             0    181  
## 12 Traits_Detect             1.00  71.0

Predicted betadiversity

Dissimilairty in interactions (Beta_WN from Poisot 2012) Dashed line is the observed network from the time-series.

Model overlap

Create a kind of venn diagram on PCA of model similarity based on per link discrepency.

## # A tibble: 24 x 3
## # Groups:   Model [6]
##    Model                      mean pair                                   
##    <chr>                     <dbl> <chr>                                  
##  1 Species_Detect_Elevation -1.00  Collared Inca_Bomarea multiflora       
##  2 Species_Detect_Elevation -1.00  Violet-tailed Sylph_Besleria solanoides
##  3 Species_Detect_Elevation -1.00  Violet-tailed Sylph_Mezobromelia capit…
##  4 Species_Detect_Elevation -1.00  Violet-tailed Sylph_Psammisia sodiroi  
##  5 Species_Detect           -0.952 Collared Inca_Bomarea multiflora       
##  6 Species_Detect           -0.950 Tawny-bellied Hermit_Columnea strigosa 
##  7 Traits_Detect            -0.938 Collared Inca_Bomarea multiflora       
##  8 Traits_Detect            -0.935 Tawny-bellied Hermit_Columnea strigosa 
##  9 Traits                   -0.927 Collared Inca_Bomarea multiflora       
## 10 Traits_Detect            -0.925 Brown Inca_Guzmania amplectens         
## # ... with 14 more rows